package com.foreknow.demo9;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * @author shkstart
 * @create 2021-07-29 8:55
 * 异常（Exception）
 * 1.所有异常的根父类是Throwable
 * 2.Throwable 有两个直接的子类：Error(错误)  Exception(异常) 我们主要处理的就是Exception
 * <p>
 * 1．检查性异常（checked exception）
 * 若系统运行时可能产生该类异常，则必须写出相应的处理代码，否则无法通过编译。
 * 2．非检查性异常（unchecked exception）
 * 非检查性异常也称之为RuntimeException，若系统运行时可能产生该类异常，则不必在程序中声明对该类异常的处理，就可以编译执行。
 * <p>
 * 如何处理异常  try....catch
 * 语法：
 * try {
 * //有可能出现异常的代码
 * }catch (Exception e){
 * e.printStackTrace();
 * }finally{
 * //无论try块中有没有异常最终都会执行finally块中的代码
 * }
 * throws  表示抛出异常(异常的声明)  ，通常这个关键字写到方法的后面
 * 语法 public void m1()  throws  异常类型 {
 * <p>
 * <p>
 * }
 * 它可以表示为为当前的方法有可能会产生异常，但是在这个方法中我们不去处理，谁调用这个方法谁来处理
 * throw  明确抛出异常
 *
 * 面试题  throws  与 throw的区别
 */

public class ExceptionDemo {
    public void m1() throws Exception {
        System.out.println("throws Exception");
    }

    public void m2() throws Exception {
        m1();
    }

    public static void main(String[] args)  {
        ExceptionDemo demo = new ExceptionDemo();
        try {
            demo.m1();
        } catch (Exception e) {
            e.printStackTrace();
        }


//        try {
//            //有可能出现异常的代码
//            // insert  update delete
//            int[] array = {1, 2, 3};
//            for (int i = 0; i <= array.length; i++) {
//                System.out.println(array[i]);
//            }
//            // 提交事务
//        } catch (Exception e) {
//            //回滚事务
//            //处理异常
//            System.out.println(e.getMessage());
//            e.printStackTrace();
//        } finally {
//            //无论try块中有没有异常最终都会执行finally块中的代码
//            //什么场景下   例： 连接数据库  释放资源
//            System.out.println("一定会执行的");
//        }
//        System.out.println("如果以上代码出现异常，那么之后的语句将无法执行");


        //一个try后面可以有多个catch，catch中的错误类型规则为由小(子类型)到大(父类型)
        try {
            Class.forName("");
            DriverManager.getConnection("", "", "");
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}
